from _typeshed import Incomplete

# class cached_property:
#     func: Incomplete
#     def __init__(self, func) -> None: ...
#     def __get__(self, instance, type): ...

class ColorThief:
    image: Incomplete
    def __init__(self, file: str) -> None: ...
    def get_color(self, quality: int = ...) -> tuple[int, int, int]: ...
    def get_palette(self, color_count: int = ..., quality: int = ...) -> list[tuple[int, int, int]]: ...

# class MMCQ:
#     SIGBITS: int
#     RSHIFT: Incomplete
#     MAX_ITERATION: int
#     FRACT_BY_POPULATIONS: float
#     @staticmethod
#     def get_color_index(r, g, b): ...
#     @staticmethod
#     def get_histo(pixels): ...
#     @staticmethod
#     def vbox_from_pixels(pixels, histo): ...
#     @staticmethod
#     def median_cut_apply(histo, vbox): ...
#     @staticmethod
#     def quantize(pixels, max_color): ...

# class VBox:
#     r1: Incomplete
#     r2: Incomplete
#     g1: Incomplete
#     g2: Incomplete
#     b1: Incomplete
#     b2: Incomplete
#     histo: Incomplete
#     def __init__(self, r1, r2, g1, g2, b1, b2, histo) -> None: ...
#     def volume(self): ...
#     @property
#     def copy(self): ...
#     def avg(self): ...
#     def contains(self, pixel): ...
#     def count(self): ...

# class CMap:
#     vboxes: Incomplete
#     def __init__(self) -> None: ...
#     @property
#     def palette(self): ...
#     def push(self, vbox) -> None: ...
#     def size(self): ...
#     def nearest(self, color): ...
#     def map(self, color): ...

# class PQueue:
#     sort_key: Incomplete
#     contents: Incomplete
#     def __init__(self, sort_key) -> None: ...
#     def sort(self) -> None: ...
#     def push(self, o) -> None: ...
#     def peek(self, index: Incomplete | None = ...): ...
#     def pop(self): ...
#     def size(self): ...
#     def map(self, f): ...
